home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Game-Power
/
Amiga Game-Power.iso
/
anwendungen
/
gw print
/
asctiny.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-20
|
3KB
|
165 lines
#include <exec/types.h>
#include <exec/execbase.h>
#include <graphics/gfxbase.h>
#include <intuition/intuition.h>
IMPORT struct ExecBase *SysBase;
extern long _savsp, _stkbase;
struct GfxBase *GfxBase = NULL;
struct IntuitionBase *IntuitionBase = NULL;
struct Window *Window = NULL;
struct RastPort *RP;
UBYTE HexDigits[] = "0123456789ABCDEF";
UBYTE ASCIITop = 0;
UBYTE InActive = 1;
UBYTE TinyMode = 0xff;
_main()
{
VOID Wait(), ReplyMsg(), *OpenLibrary(), *OpenWindow();
char tst;
struct NewWindow nw;
struct IntuiMessage *msg, *GetMsg();
_stkbase = _savsp - *((long *)_savsp+1) + 8;
*(long *)_stkbase = 0x4d414e58L;
if (!(GfxBase = OpenLibrary("graphics.library", 0L))) CleanUp();
if (!(IntuitionBase = OpenLibrary("intuition.library", 0L))) CleanUp();
nw.LeftEdge = 0; /* 557; */
nw.TopEdge = 0;
nw.Width = 83;
nw.Height = 10;
nw.DetailPen = -1;
nw.BlockPen = -1;
nw.IDCMPFlags = RAWKEY | REFRESHWINDOW | ACTIVEWINDOW | INACTIVEWINDOW;
nw.Flags = WINDOWDRAG | WINDOWDEPTH | SIMPLE_REFRESH;
nw.FirstGadget = NULL;
nw.CheckMark = NULL;
nw.Title = NULL;
nw.Type = WBENCHSCREEN;
if (!(Window = OpenWindow(&nw))) CleanUp();
RP = Window->RPort;
SetAPen(RP, 1L);
SetDrMd(RP, JAM2);
FOREVER {
Wait(1L << Window->UserPort->mp_SigBit);
while (msg = GetMsg(Window->UserPort)) {
ULONG class;
UWORD code;
class = msg->Class;
code = msg->Code;
ReplyMsg(msg);
switch (class) {
case REFRESHWINDOW:
ListASCII();
break;
case ACTIVEWINDOW:
InActive = 0;
if (TinyMode) SizeWindow(Window, 0L, 131L);
break;
case INACTIVEWINDOW:
InActive = 1;
if (TinyMode) SizeWindow(Window, 0L, -131L);
case RAWKEY:
tst = 1;
switch (code) {
case 0x45: /* ESC */
CleanUp();
break;
case 0x46: /* DEL */
TinyMode = ~TinyMode;
break;
case 0x4c: /* Up Arrow */
ASCIITop--;
break;
case 0x4d: /* Down Arrow */
ASCIITop++;
break;
case 0x4e: /* Right Arrow */
ASCIITop += 16;
break;
case 0x4f: /* Left Arrow */
ASCIITop -= 16;
break;
default:
tst = 0;
break;
}
if (tst) ListASCII();
break;
} /* switch */
} /* while */
} /* FOREVER */
}
ListASCII()
{
UBYTE i, j;
UBYTE sbuff[4];
if (InActive && TinyMode)
return;
for (i = 17, j = ASCIITop; i < 145; i += 8, j++) {
DecToString(sbuff, j);
Move(RP, 5L, (long)i);
Text(RP, sbuff, 3L);
Move(RP, 37L, (long)i);
Text(RP, "$", 1L);
sbuff[1] = HexDigits[j & 0x0f];
sbuff[0] = HexDigits[j >> 4];
Text(RP, sbuff, 2L);
Move(RP, 69L, (long)i);
Text(RP, &j, 1L);
}
}
DecToString(buf, val)
UBYTE *buf;
UBYTE val;
{
UBYTE i;
UBYTE c, hitval;
UBYTE temp, value;
UBYTE divider;
value = val;
i = 0;
hitval = 0;
divider = 100;
while (divider != 1) {
temp = value / divider;
value %= divider;
c = (UBYTE)temp + 0x30;
if (c != 0x30)
hitval = 1;
if (hitval == 0 && c == 0x30)
buf[i] = 0x20;
else
buf[i] = c;
i++;
divider /= 10;
}
buf[2] = (val % 10) + 0x30;
}
CleanUp()
{
VOID CloseWindow(), CloseLibrary();
if (Window) CloseWindow(Window);
if (IntuitionBase) CloseLibrary(IntuitionBase);
if (GfxBase) CloseLibrary(GfxBase);
{
#asm
moveq.l #0,d0
move.l __savsp#,sp ;get back original stack pointer
rts ;and exit
#endasm
}
}